using System;
using System.Collections.Generic;
using UD.GRAL.Entity;
using Microsoft.Practices.EnterpriseLibrary.Data;
using System.Data.Common;
using System.Data;
using UD.Utilities.Exceptions;

namespace UD.GRAL.DataAccess
{
    public class ProyectoCurricularUDDAL : GeneralDAL
    {
        public ProyectoCurricularUDDAL()
        {
        }
        public int InsertarProyectoCurricularUD(ProyectoCurricularUD pProyectoCurricularUD)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_ProyectoCurricularUD_Insertar"))
                {
                    int vResultado;
                    vDataBase.AddOutParameter(vDbCommand, "@IdProyectoCurricular", DbType.Int32, 18);
                    vDataBase.AddInParameter(vDbCommand, "@IdFacultad", DbType.Int32, pProyectoCurricularUD.IdFacultad);
                    vDataBase.AddInParameter(vDbCommand, "@CodProyectoCurricular", DbType.String, pProyectoCurricularUD.CodProyectoCurricular);
                    vDataBase.AddInParameter(vDbCommand, "@NombreProyectoCurricular", DbType.String, pProyectoCurricularUD.NombreProyectoCurricular);
                    vDataBase.AddInParameter(vDbCommand, "@Estado", DbType.Boolean, pProyectoCurricularUD.Estado);
                    vDataBase.AddInParameter(vDbCommand, "@UsuarioCrea", DbType.String, pProyectoCurricularUD.UsuarioCrea);
                    vResultado = vDataBase.ExecuteNonQuery(vDbCommand);
                    pProyectoCurricularUD.IdProyectoCurricular = Convert.ToInt32(vDataBase.GetParameterValue(vDbCommand, "@IdProyectoCurricular").ToString());
                    GenerarLogAuditoria(pProyectoCurricularUD, vDbCommand);
                    return vResultado;
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                 throw new GenericException(ex);
            }
        }
        public int ModificarProyectoCurricularUD(ProyectoCurricularUD pProyectoCurricularUD)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_ProyectoCurricularUD_Modificar"))
                {
                    int vResultado;
                    vDataBase.AddInParameter(vDbCommand, "@IdProyectoCurricular", DbType.Int32, pProyectoCurricularUD.IdProyectoCurricular);
                    vDataBase.AddInParameter(vDbCommand, "@IdFacultad", DbType.Int32, pProyectoCurricularUD.IdFacultad);
                    vDataBase.AddInParameter(vDbCommand, "@CodProyectoCurricular", DbType.String, pProyectoCurricularUD.CodProyectoCurricular);
                    vDataBase.AddInParameter(vDbCommand, "@NombreProyectoCurricular", DbType.String, pProyectoCurricularUD.NombreProyectoCurricular);
                    vDataBase.AddInParameter(vDbCommand, "@Estado", DbType.Boolean, pProyectoCurricularUD.Estado);
                    vDataBase.AddInParameter(vDbCommand, "@UsuarioModifica", DbType.String, pProyectoCurricularUD.UsuarioModifica);
                    vResultado = vDataBase.ExecuteNonQuery(vDbCommand);
                    GenerarLogAuditoria(pProyectoCurricularUD, vDbCommand);
                    return vResultado;
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                 throw new GenericException(ex);
            }
        }
        public int EliminarProyectoCurricularUD(ProyectoCurricularUD pProyectoCurricularUD)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_ProyectoCurricularUD_Eliminar"))
                {
                    int vResultado;
                    vDataBase.AddInParameter(vDbCommand, "@IdProyectoCurricular", DbType.Int32, pProyectoCurricularUD.IdProyectoCurricular);
                    vResultado = vDataBase.ExecuteNonQuery(vDbCommand);
                    GenerarLogAuditoria(pProyectoCurricularUD, vDbCommand);
                    return vResultado;
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                 throw new GenericException(ex);
            }
        }


        public ProyectoCurricularUD ConsultarProyectoCurricularUD(int pIdProyectoCurricular)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_ProyectoCurricularUD_Consultar"))
                {
                    vDataBase.AddInParameter(vDbCommand, "@IdProyectoCurricular", DbType.Int32, pIdProyectoCurricular);
                    using (IDataReader vDataReaderResults = vDataBase.ExecuteReader(vDbCommand))
                    {
                        ProyectoCurricularUD vProyectoCurricularUD = new ProyectoCurricularUD();
                        while (vDataReaderResults.Read())
                        {
                            vProyectoCurricularUD.IdProyectoCurricular = vDataReaderResults["IdProyectoCurricular"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdProyectoCurricular"].ToString()) : vProyectoCurricularUD.IdProyectoCurricular;
                            vProyectoCurricularUD.IdFacultad = vDataReaderResults["IdFacultad"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdFacultad"].ToString()) : vProyectoCurricularUD.IdFacultad;
                            vProyectoCurricularUD.CodProyectoCurricular = vDataReaderResults["CodProyectoCurricular"] != DBNull.Value ? Convert.ToString(vDataReaderResults["CodProyectoCurricular"].ToString()) : vProyectoCurricularUD.CodProyectoCurricular;
                            vProyectoCurricularUD.NombreProyectoCurricular = vDataReaderResults["NombreProyectoCurricular"] != DBNull.Value ? Convert.ToString(vDataReaderResults["NombreProyectoCurricular"].ToString()) : vProyectoCurricularUD.NombreProyectoCurricular;
                            vProyectoCurricularUD.Estado = vDataReaderResults["Estado"] != DBNull.Value ? Convert.ToBoolean(vDataReaderResults["Estado"].ToString()) : vProyectoCurricularUD.Estado;
                            vProyectoCurricularUD.UsuarioCrea = vDataReaderResults["UsuarioCrea"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioCrea"].ToString()) : vProyectoCurricularUD.UsuarioCrea;
                            vProyectoCurricularUD.FechaCrea = vDataReaderResults["FechaCrea"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaCrea"].ToString()) : vProyectoCurricularUD.FechaCrea;
                            vProyectoCurricularUD.UsuarioModifica = vDataReaderResults["UsuarioModifica"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioModifica"].ToString()) : vProyectoCurricularUD.UsuarioModifica;
                            vProyectoCurricularUD.FechaModifica = vDataReaderResults["FechaModifica"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaModifica"].ToString()) : vProyectoCurricularUD.FechaModifica;
                        }
                        return vProyectoCurricularUD;
                    }
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new GenericException(ex);
            }
        }

        public List<ProyectoCurricularUD> ConsultarProyectoCurricularUDs(String pCodProyectoCurricular, String pNombreProyectoCurricular, Boolean? pEstado)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_ProyectoCurricularUDs_Consultar"))
                {
                    if(pCodProyectoCurricular != null)
                         vDataBase.AddInParameter(vDbCommand, "@CodProyectoCurricular", DbType.String, pCodProyectoCurricular);
                    if(pNombreProyectoCurricular != null)
                         vDataBase.AddInParameter(vDbCommand, "@NombreProyectoCurricular", DbType.String, pNombreProyectoCurricular);
                    if(pEstado != null)
                         vDataBase.AddInParameter(vDbCommand, "@Estado", DbType.Boolean, pEstado);
                    using (IDataReader vDataReaderResults = vDataBase.ExecuteReader(vDbCommand))
                    {
                        List<ProyectoCurricularUD> vListaProyectoCurricularUD = new List<ProyectoCurricularUD>();
                        while (vDataReaderResults.Read())
                        {
                                ProyectoCurricularUD vProyectoCurricularUD = new ProyectoCurricularUD();
                            vProyectoCurricularUD.IdProyectoCurricular = vDataReaderResults["IdProyectoCurricular"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdProyectoCurricular"].ToString()) : vProyectoCurricularUD.IdProyectoCurricular;
                            vProyectoCurricularUD.IdFacultad = vDataReaderResults["IdFacultad"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdFacultad"].ToString()) : vProyectoCurricularUD.IdFacultad;
                            vProyectoCurricularUD.CodProyectoCurricular = vDataReaderResults["CodProyectoCurricular"] != DBNull.Value ? Convert.ToString(vDataReaderResults["CodProyectoCurricular"].ToString()) : vProyectoCurricularUD.CodProyectoCurricular;
                            vProyectoCurricularUD.NombreProyectoCurricular = vDataReaderResults["NombreProyectoCurricular"] != DBNull.Value ? Convert.ToString(vDataReaderResults["NombreProyectoCurricular"].ToString()) : vProyectoCurricularUD.NombreProyectoCurricular;
                            vProyectoCurricularUD.Estado = vDataReaderResults["Estado"] != DBNull.Value ? Convert.ToBoolean(vDataReaderResults["Estado"].ToString()) : vProyectoCurricularUD.Estado;
                            vProyectoCurricularUD.UsuarioCrea = vDataReaderResults["UsuarioCrea"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioCrea"].ToString()) : vProyectoCurricularUD.UsuarioCrea;
                            vProyectoCurricularUD.FechaCrea = vDataReaderResults["FechaCrea"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaCrea"].ToString()) : vProyectoCurricularUD.FechaCrea;
                            vProyectoCurricularUD.UsuarioModifica = vDataReaderResults["UsuarioModifica"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioModifica"].ToString()) : vProyectoCurricularUD.UsuarioModifica;
                            vProyectoCurricularUD.FechaModifica = vDataReaderResults["FechaModifica"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaModifica"].ToString()) : vProyectoCurricularUD.FechaModifica;
                                vListaProyectoCurricularUD.Add(vProyectoCurricularUD);
                        }
                        return vListaProyectoCurricularUD;
                    }
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new GenericException(ex);
            }
        }
    }
}
